package com.nbcio.pm.service;

import com.nbcio.common.mybatis.core.page.PageQuery;
import com.nbcio.common.mybatis.core.page.TableDataInfo;
import com.nbcio.pm.domain.bo.PmTimeTrackingBo;
import com.nbcio.pm.domain.vo.PmTimeTrackingVo;
import com.nbcio.pm.domain.vo.PmTimeStatsVo;

import java.time.LocalDate;

/**
 * 时间跟踪Service接口
 *
 * @author nbacheng
 */
public interface IPmTimeTrackingService {

    /**
     * 查询时间跟踪记录
     *
     * @param bo 查询条件
     * @param pageQuery 分页参数
     * @return 时间跟踪记录列表
     */
    TableDataInfo<PmTimeTrackingVo> queryPageList(PmTimeTrackingBo bo, PageQuery pageQuery);

    /** 新增记录 */
    Boolean insertByBo(PmTimeTrackingBo bo);

    /** 更新记录 */
    Boolean updateByBo(PmTimeTrackingBo bo);

    /** 批量删除 */
    Boolean deleteWithValidByIds(java.util.Collection<Long> ids);

    /**
     * 开始时间跟踪
     *
     * @param bo 时间跟踪信息
     * @return 是否成功
     */
    Boolean startTracking(PmTimeTrackingBo bo);

    /**
     * 停止时间跟踪
     *
     * @param id 记录ID
     * @return 是否成功
     */
    Boolean stopTracking(Long id);

    /**
     * 获取用户时间统计
     *
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 时间统计
     */
    PmTimeStatsVo getUserTimeStats(Long userId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取项目时间统计
     *
     * @param projectId 项目ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 时间统计
     */
    PmTimeStatsVo getProjectTimeStats(Long projectId, LocalDate startDate, LocalDate endDate);
}
